<?php

  require_once 'ExtratorSinopse.php';
  require_once 'FiltroTags.php';
  
/**
 * Classe responsável pela implementação do Crawler, contendo
 * métodos básicos para a realização dessa tarefa.
 *
 * @author tsalles
 * @copyright 2008
 */

class CrawlerSinopse {
    
	private $query;
	
	private $sinopse;
	
    // CONSTRUTOR
    function CrawlerSinopse() {
    }
    
   /*********************************************************
    * FUNÇÕES PRIVADAS
    *********************************************************/
    
   /**
    * Obtém o documento, através da url (biblioteca cURL))
    */
    private function recuperarConteudoViaURL($url) {

         $handle = @fopen ($url, "r");
         if ($handle === false) {echo "PAU $url !"; return false;}
         $buffer = "";
         while (!feof ($handle)) {
             $buffer .= fgets($handle, 4096);
         }
         fclose ($handle);
         return $buffer;
   }
    
   /**
    * Faz o crawling partindo da URL passada como parâmetro.
    * São obtidos os links presentes na página, atualizando
    * as informações pertinentes no banco (hora da visita, 
    * referências, etc). Retorna as urls obtidas.
    */
	private function varreURL($url) {
	    $res = $this->recuperarConteudoViaURL($url);
	    if ($res == false) {
            // PROBLEMA !
            return false;
        }

        $extratorSinopse = new ExtratorSinopse(); 

        $extratorSinopse->filtrarDocumento($res);
        
        return $extratorSinopse->obtemElementosFiltrados();
    }
	
    // Inicia o crawling, partindo das URL's sementes
    // http://www.imdb.com/find?q=rambo;s=tt;tgenre=Action
    public function inicia($q) {
        
        $res = $this->varreURL($q);
        if (!$res) {
            return false; // falha.
        }
        else {
            // A lista de filmes foi obtida !
            $this->sinopse = $res; 
            return true;
        }
    }
    
    public function obtemSinopse() {
        return $this->sinopse;
    }

}

?>